#!/bin/bash

######################################################################

# for getting files and urls' from echomsk server 
ECHO_LIVE_URL=http://w02-sw01.akadostream.ru:8000/moscowecho128.mp3
ECHO_URL=http://www.echo.msk.ru/programs/
RSS_FILE=rss-audio.xml

# Where to save temp files 
TMP_DIR=~/.tmp_echomsk_files/
[ ! -d ${TMP_DIR} ] && mkdir ${TMP_DIR}

# Temp files 
TMP_FILE_URLS=${TMP_DIR}/tmp_echo_urls
TMP_FILE_NAMES=${TMP_DIR}/tmp_names

# Which player we want to use for plaing podcasts 
PLAYER=mplayer
OPTIONS_FOR_PLAYER="-really-quiet cache 16000"

# Other help vars 
PARSER=""

######################################################################


function get_program_mp3_urls {
	url_arg=$(head -${1} ${TMP_FILE_NAMES} | tail -1 | awk '{print $1}')
	RSS_ECHO_URL=${ECHO_URL}${url_arg}/${RSS_FILE}

	# get urls and save them in temp file 
	curl --silent ${RSS_ECHO_URL} | grep .mp3 | ./cut-urls > ${TMP_FILE_URLS}

	pr_url_number=$(cat ${TMP_FILE_URLS} | wc -l)
	if [ ${pr_url_number} -eq 0 ]
	then 
		echo "Отсутствуют ссылки к mp3-файлам программы"
		return
	fi 
}


function print_main_help {
	echo "<parser>	- Строка из названия программы. Для поиска"
	echo "<number>   - Выбор программы"
	echo "l [parser] - Список програм"
	echo "r          - Прямой эфир"
	echo "h          - Подсказка"
	echo "q          - Выход"
	echo
}

function print_prog_help {
	echo "<number> - Проиграть передачу"
	echo "h        - Подсказка"
	echo "l        - Получить список mp3-ссылок к передачам"
	echo "lg       - Получить список скаченных mp3-файлов"
	echo "n        - RSS-лента последних передач"
	echo "r        - Обновление ссылок к передачам"
	echo "g <num>  - Скачать программу по ссылке с номером <num>. 'u' -  получение списка ссылок"
	echo "q        - Возвращение в главное меню"
	echo "x        - Выход из программы"
	echo
}

# Get prog names in TMP_FILE_NAMES
function get_programs {
	./mecho_names.sh | grep "${PARSER}" > ${TMP_FILE_NAMES}
	pr_names_number=$(cat ${TMP_FILE_NAMES} | wc -l)
	if [ ${pr_names_number} -eq 0 ]
	then
		echo "Не возможно получить список передач"
	fi
}


# Print prog names nice
function print_programs {
	sed -e "s/.* - //" $TMP_FILE_NAMES | cat -n - 
}


function play_url {
	URL_TO_PLAY=$1
	CMD=${PLAYER}" "${OPTIONS_FOR_PLAYER}" "${URL_TO_PLAY}
	echo ; echo "Playing: "${URL_TO_PLAY} ; echo
	echo "Space - Пауза, q  - Стоп" ; echo
	eval ${CMD}
	echo "Stop..." ; echo
}


function go_to_programm {

	prog_pars=$1

	echo ${prog_pars} | grep "[:0-9:]" >/dev/null
	if [ $? -ne 0 ]
	then
		return
	fi
	cat -n ${TMP_FILE_NAMES} | grep -w ${prog_pars}  &> /dev/null
	if [ $? -ne 0 ]
	then
		echo
		echo "Прямой Эфир..."
		play_url ${ECHO_LIVE_URL} 2>/dev/null
		continue
	fi

	program_name=$(head -${1} ${TMP_FILE_NAMES} | tail -1 | sed -e "s/.* - //")
	PREFIX=${program_name}" > "
	echo "получение ссылок к передачам: "${program_name}" ..."
	echo
	get_program_mp3_urls ${prog_pars}

	while true
	do
		words[1]=""
		words[2]=""
		words[3]=""

		printf "${PREFIX}"
		read n

		echo $n | tr ' ' '\n' > ${FILE_FOR_WORDS}

		let index=1

		while read line
		do
			words[${index}]=${line}
			let index++
		done < ${FILE_FOR_WORDS}

		case ${words[1]} in
			h) 	echo ; echo "Подсказка: "
				print_prog_help
			;;

			l) 	echo ; echo "Список mp3-ссылок к передачам:"
				cat -n ${TMP_FILE_URLS}
				echo
			;;

			n) 	echo ; echo "RSS-лента последних передач:" ; echo
				./mecho_news.sh ${url_arg}
				echo 
			;;

			r) 	echo
				echo "Обновление ссылок к передачам: "${program_name}" ..."
				echo
				get_program_mp3_urls ${prog_pars}
			;;

			g) 	echo
				echo "Скачиваем файл...: "
				url=$(head -${words[2]} ${TMP_FILE_URLS} | tail -1)
				echo ${url}
				url_arg=$(head -${prog_pars} ${TMP_FILE_NAMES} | tail -1 \
					| awk '{print $1}')
				[ ! -d ${TMP_DIR}/${url_arg} ] && mkdir ${TMP_DIR}/${url_arg} 
				cd ${TMP_DIR}/${url_arg}
				wget -c "${url}"
				cd - &>/dev/null 
			;;
			
			lg)	echo
				echo "Список скаченных файлов"
				url_arg=$(head -${prog_pars} ${TMP_FILE_NAMES} | tail -1 \
					| awk '{print $1}')
				[ ! -d ${TMP_DIR}/${url_arg} ] && mkdir ${TMP_DIR}/${url_arg} 
				cd ${TMP_DIR}/${url_arg}
				ls | cat -n 
				cd - &>/dev/null
			;;

			f)	echo
				url_arg=$(head -${prog_pars} ${TMP_FILE_NAMES} | tail -1 \
					| awk '{print $1}')
				cd ${TMP_DIR}/${url_arg}

				ls | cat -n | grep -w ${words[2]}
				cd - &>/dev/null
			;;

			[0-9]*) 	
				echo
				[ ${words[1]} -gt ${pr_url_number} ] && continue
				url=$(head -${words[1]} ${TMP_FILE_URLS} | tail -1)
				play_url ${url} 2>/dev/null
			;;

			"")	continue
			;;

			q) 	PREFIX='> '
				return 
			;;

			x) 	echo ; echo "Выход" ; exit 
			;;

			*) echo "Неизвестная команда. Используйте h для подсказки"
		esac
	done
}



#######################
###		 START	    ###
#######################

FILE_FOR_WORDS=".tmp_input_words"
PREFIX='> '

echo
echo "получение списка программ..."
get_programs
echo

# Print help 
print_main_help

while true
do
	words[1]=""
	words[2]=""
	words[3]=""

	index=1

	printf "${PREFIX}"
	read n
	echo $n | tr ' ' '\n' > ${FILE_FOR_WORDS}

	while read line
	do
		words[${index}]=${line}
		let index++
	done < ${FILE_FOR_WORDS}

	case ${words[1]} in 
		h) 	echo ; echo "Подсказка: "
			print_main_help
		;;

		l) 	echo ; echo "Список программ"
			print_programs | grep -i "${words[2]}"
			echo
		;;

		r) 	echo ; echo "Прясой эфир"
			play_url ${ECHO_LIVE_URL} 2>/dev/null
		;;

		[0-9]*) go_to_programm ${words[1]}
				PREFIX='> '
		;;

		"")	continue
		;;

		q) 	echo ; echo "Пока"
			exit
		;;

		*) 	print_programs | grep -i "${words[1]}" || \
			echo "Неизвестная команда. Используйте h для подсказки"
	esac
done

exit
